'use strict'
const util = require('util')
const tips = require('./tips.js')

/**
 * 成功的统一回复
 * @param {*} ctx koa ctx
 * @param {*} result 输出的结果对象
 * @param {*} __error 输出的错误码
 * @param {*} msg 输出的说明信息
 * @param {*} statusCode http 码
 */
function succ(ctx, result = {},__error=0, msg='',statusCode = 200) {
    ctx.status = statusCode
    ctx.body = {
        __error: __error,
        result,
        msg
    }
}

/**
 * 成功的统一回复
 * @param {*} ctx koa ctx
 * @param {*} result 输出的结果对象
 * @param {*} msg 输出的说明信息
 */
function success(ctx, msg='',result = {}) {
    ctx.status = 200;
    ctx.body = {
        __error: 0,
        msg,
        result,
        
    }
}
/**
 * 异常的统一回复
 * @param {*} ctx koa ctx
 * @param {*} msg 输出的说明信息
 */
function error(ctx, msg = '',__error = -1) {
    ctx.status = 200;
    ctx.body = {
        __error: __error,
        msg
    }
}

/**
 * 用户登录状态异常的统一回复
 * @param {*} ctx koa ctx
 * @param {*} msg 输出的说明信息
 */
function tokenError(ctx) {
    ctx.status = 200;
    ctx.body = {
        __error: 400001,
        msg:'请先登录'
    }
}

/**
 * 失败的统一回复
 * @param {*} ctx koa ctx
 * @param {*} error errorCode
 * @param {number} statusCode httpStatusCode
 */
function fail(ctx, error, statusCode = 400) {

    // console.error(req.originalUrl, (req.method == 'POST') ? req.body : '', error)
    if (typeof (error) !== 'string') {
        console.error(error)
        error = 'common.system_busy' // 安慰用户的提示错误
    }

    let tip = tips.tipOf(error)
    let param = getParams(ctx)
    ctx.status = statusCode
    ctx.body = {
        __error: error,
        __tip: tip
    }
    console.warn(`ip:${ctx.ip} fail statusCode:${statusCode} __error:${error} __tip:${tip} param:${JSON.stringify(param)}`)
}

function getParams(ctx) {
    let input = {}
    if (ctx.method == 'GET') input = { ...ctx.params, ...ctx.request.query ,...ctx.request.body}
    if (ctx.method == 'POST') input = { ...ctx.params, ...ctx.request.body }
    if (ctx.method == 'PATCH') input = { ...ctx.params, ...ctx.request.body }
    if (ctx.method == 'DELETE') input = { ...ctx.params, ...ctx.request.body }
    if (ctx.method == 'PUT') input = { ...ctx.params, ...ctx.request.body }

    return input
}
/**
 * 检查一些必须传入的参数
 * @param {*} ctx 
 * @param {*} fields 
 */
function checkInput(ctx, fields) {
    let input = getParams(ctx)
    console.log('input:',input)
    for (let field of fields) {
        if (util.isUndefined(input[field])) 
        return ['illegal ' + field, {}]
    }

    return [null, input]
}

const msg = {
    SUCCESS: "获取成功"
}



module.exports = {
    checkInput,
    getParams,
    succ,
    fail,
    success,
    error,
    tokenError,
    msg
}